package com.java.simple.study.juc.p5;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;

/**
 * @author zhoujunlin
 * @date 2022年07月04日 21:06
 * @desc
 */
public class AtomicUpdaterTest {

    /**
     * 属性需要有volatile修饰否则会有如下异常
     * java.lang.IllegalArgumentException: Must be volatile type
     */
    private volatile int intField;

    public static void main(String[] args) {
        AtomicIntegerFieldUpdater<AtomicUpdaterTest> intFieldUpdater =
                AtomicIntegerFieldUpdater.newUpdater(AtomicUpdaterTest.class, "intField");
        AtomicUpdaterTest atomicUpdaterTest = new AtomicUpdaterTest();
        intFieldUpdater.compareAndSet(atomicUpdaterTest, 0, 10);
        // 修改成功 0 -> 10
        System.out.println(atomicUpdaterTest.intField); // 10

        intFieldUpdater.compareAndSet(atomicUpdaterTest, 10, 20);
        // 修改成功 10 -> 20
        System.out.println(atomicUpdaterTest.intField);  // 20

        intFieldUpdater.compareAndSet(atomicUpdaterTest, 10, 30);
        // 修改失败 10 -> 30
        System.out.println(atomicUpdaterTest.intField); // 20

    }

}
